/**
 * @description 多线程共享内存引发问题例程   加减法失效
 * 程序说明：
 * 两个线程同时操作同一个共享的内存数据m_data,一个线程做加1，另一个做减1，同时操作10000次
 * 最后输出结果，结果 不确定，且不为零。   
 * 这个程序运行可能 不结束，而且 m_data 最后总是0 和教材结果不一样。。。
 *  
 * @pageNo 406
 * @author mlmoria
 * @date 2017年2月6日
 * 
 */
package No11Thread;

public class J_ThreadSum extends Thread{

	public static int m_data=0;
	public static int m_times=1000;
	
	public int m_ID;
	public boolean m_done;
	
	public J_ThreadSum(int id) {
       m_ID=id;
	}
	
	@Override
	public void run() {
		m_done=false;
		int d=((m_ID%2==0)?1:-1);
		System.out.println("运行的线程："+m_ID+"(增量为："+d+")");
		for(int i=0;i<m_times;i++)
		for(int j=0;j<m_times;j++)
		m_data+=d;
		m_done=true;
		System.out.println("结束线程："+m_ID);
	}
	
	public static void main(String[] args) {
		J_ThreadSum t1=new J_ThreadSum(1);
		J_ThreadSum t2=new J_ThreadSum(2);	
		t1.m_done=false;
		t2.m_done=false;
		t1.start();
		t2.start();
		while(!t1.m_done||!t2.m_done);//等待两个进程结束
		System.out.println("结果：m_data="+m_data);
	}
	
}
